﻿// Ŭnicode please

#include "SRMacro.h"
#include <vector>
#include <memory>

namespace sora
{
	class SceneNode;
	class SceneNodeGroup;
	class ModelNode;
	class LightNode;
	class LightCodeStack;

	class SceneNodeVisitor {
	public:
		SceneNodeVisitor() {}
		virtual ~SceneNodeVisitor() {}

		virtual void visit(SceneNodeGroup *node) = 0;
		virtual void visit(ModelNode *node) = 0;
		virtual void visit(LightNode *node) = 0;
	};

#if _GLES1_
	class GLES1Renderer : public SceneNodeVisitor {
	public:
		GLES1Renderer();
		virtual ~GLES1Renderer();
		void visit(SceneNodeGroup *node);
		void visit(ModelNode *node);
		void visit(LightNode *node);

		void render(SceneNode *node);

	private:
		std::auto_ptr<LightCodeStack> lightCodeStack_;
	};	
#endif
}